const CODE_MESSAGE = {
  0: "SUCCESS",
};

/**
 * 返回分页信息
 * @typedef {Object} BasePageInfo
 * @property {number} page - 分页
 * @property {number} pageSize - 每一页数量
 * @property {number} total - 数据总量
 */

/**
 * 标准的响应形式，所有的响应都调用该函数
 * @param data      响应数据
 * @param code     响应代码, 默认: 0
 * @param message  错误信息
 * @param {BasePageInfo} [pageInfo] 分页信息
 * @returns
 */
export function response(data, code = 0, message = null, pageInfo = null) {
  return {
    code,
    //@ts-ignore
    message: message || CODE_MESSAGE[code],
    data:
      pageInfo == null
        ? data
        : {
            data,
            pageInfo: responsePageInfo(
              pageInfo.page,
              pageInfo.pageSize,
              pageInfo.total
            ),
          },
  };
}

/**
 * 返回分页信息
 * @typedef {Object} ResponsePageInfo
 * @property {number} page - 分页
 * @property {number} pageSize - 每一页数量
 * @property {number} total - 数据总量
 * @property {number} totalPage - 总页数
 * @property {boolean} isEnd - 是否最后一页
 */

/**
 * 生成返回的分页信息
 * @param {number} page       分页
 * @param {number} pageSize   每一页显示数量
 * @param {number} total      数据总量
 * @returns {ResponsePageInfo}
 */
export function responsePageInfo(page, pageSize, total) {
  const totalPage = Math.ceil(total / (pageSize || 10));
  return {
    page: page || 1,
    pageSize: pageSize || 10,
    total,
    totalPage,
    isEnd: page >= totalPage,
  };
}
